package com.tabnet.dao;

import java.util.Map;

import com.tabnet.beans.commande.Commande;
import com.tabnet.beans.personnes.Client;

/**
 * <p>Interface DAOCommande</p>
 * @author Corentin, Cyril, Neven, Anabella
 * */
public interface DAOCommande {

	/**
	 * <p>Procédure getCommande<br />
	 * Recupere lune commande specifique d'un client</p>
	 * @param pRef : La référence de la commande
	 * @param pId : id d'un client
	 * @throws DAOException
	 * @return un objet Commande
	 * */
	public Commande getCommande(String pRef, int pIdClient) throws DAOException;
	
	/**
	 * <p>Procédure getCommandesTerminees<br />
	 * Recupere les commandes terminees d'un client</p>
	 * @param pId : id d'un client
	 * @throws DAOException
	 * @return Map >String, Commande>
	 */
	public Map<String, Commande> getCommandesTerminees(int pId) throws DAOException;
	
	/**
	 * <p>Procédure getCommandeEnCours<br />
	 * Recupere la commande en cours d'un client</p>
	 * @param pId : id d'un client
	 * @throws DAOException
	 * @return Commande
	 */
	public Commande getCommandeEnCours(int pId) throws DAOException;
	
	/**
	 * <p>Procédure addCommande<br />
	 * Creer une commande dans la base de données avec le statut "En Cours"</p>
	 * @param pClient : un objet Client
	 * @throws DAOException
	 * @return la nouvelle référence insérer
	 */
	public String addCommande(Client pClient) throws DAOException;

	/**
	 * <p>Procédure updCommande<br />
	 * Met a jour la commande d'un client en mettant une date de validation et en changeant l'etat de la commande</p>
	 * @param pRef : La reference de la commande 
	 * @throws DAOException
	 */
	public void updCommande(String pRef) throws DAOException;
	
	/**
	 * <p>Procédure delCommande<br />
	 * Supprime la commande ayant le statut "En Cours"</p>
	 * @param pRef : La reference de la commande 
	 * @throws DAOException
	 */
	public void delCommande(String pRef) throws DAOException;
}
